<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Vue监测数据改变的原理_数组</title>
    <!--引入vue-->
    <script type="text/javascript" src="../js/vue.js"></script>
   </head>

<body>
	<!-- 
	 1、在数组最后一个元素后面添加一个元素 -- push
	 2、删除最后一个元素 -- pop
	 3、删除数组第一个元素 -- shift
	 4、在第一个元素前加一个元素 -- unshift
	 5、替换/删除/插入 指定位置的元素 --splice
	 6、对数组进行排序 -- sort
	 7、将数组进行反转 -- reverse
	 -->
	
	
	
	
	
	
    <!--准备好一个容器-->
    <div id="root">
      <h1>学校信息</h1>
  <button @click="masterInfo">点击获取校长信息</button>
  <h2>学校名称：{{school.name}}</h2>
  <h2>学校地址：{{school.address}}</h2>
  <h2 v-if="school.master">校长是：{{school.master}}</h2>
  <hr/>
  <h1>学生信息</h1>
  <button @click="addSex">添加一个性别属性，默认值是女</button>
  <h2>姓名：{{student.name}}</h2> 
  <h2>年龄：真实{{student.age.rAge}}，对外{{student.age.sAge}}</h2> 
  <h2 v-if="student.sex">性别：{{student.sex}}</h2> 
  <h2>朋友们</h2>  
    <!-- 列表  -->
    <ul>
      <li v-for="(f,index) in student.fridends" :key="index">
	  {{f.name}}--{{f.age}}
	  </li>
    </ul>
	
	<h2>爱好</h2>
	  <!-- 列表  -->
	  <ul>
	    <li v-for="(h,index) in student.hobby" :key="index">
		  {{h}}
		  </li>
	  </ul>
    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false  //阻止vue在启动时生成使用生产版本提示。

    const vm =  new Vue({
      el:'#root',
      data:{
        school:{
          name:'天津大学',
          address:'卫津路92号',
        },             
        student:{
          name:'tom',
          age:{
            rAge:30,
            sAge:25
          },
		  hobby:[
			  '抽烟','喝酒','烫头'
		  ],
          sex:'',
          fridends:[
            {name:'jerry',age:35},
            {name:'tony',age:24}
            ]          
        }
      },
      methods: { // 一般情况下methods正常写，this就是当前对象vm
        addSex(){
          Vue.set(this.student,'sex','女')
          //this.$set(this.student,'sex','女')
        },
        masterInfo(){
          // 不允许给data对象身上直接追加属性。只允许给data对象身上的属性追加属性；Vue.set()这个api不是万能的
          //Vue.set(vm._data,'master','冯骥才')// 报错--[Vue warn]: Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option.
          this.$set(this.school,'master','冯骥才')
          //Vue.set(this.school,'master','冯骥才')
        }
      },
    })
</script>
</html>
